home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / comt010d.zip / COMTSRC.ZIP / OBF.ASM < prev    next >
Assembly Source File  |  1991-12-26  |  3KB  |  173 lines

  1. .model tiny
  2. .code
  3. org 100h
  4. Start:
  5. ; Comment out for error checking
  6.  
  7. smov macro x,y
  8.   push y
  9.   pop x
  10. endm
  11.  
  12. LineFeed macro
  13.    cmp ax,0a0dh
  14. endm
  15.  
  16. Zeta0 = 6d72h
  17. Zeta = 6e71h
  18. Zeta2 = 4b60h
  19.  
  20. Off100:
  21.  
  22. db 'ENC.COM.'
  23. db 'ABC'      ; this says how far it is to the end from after the 'C'
  24.  
  25. LineFeed
  26.  
  27.        and ax,3030h
  28.        and ax,4040h   ; set ax=0
  29.        smov dx,ax     ; set dx=0
  30.  
  31.        sub ax,Zeta0
  32.        sub ax,Zeta0
  33.        sub ax,-(offset Jmp2)-Zeta0-Zeta0
  34.        smov di,ax
  35.        smov si,dx
  36.        dec si
  37.        xor [di],si
  38. ;       sub al,Jmp2-Jmp1
  39. ;       smov di,ax
  40. ;       smov si,dx
  41. ;       and [di],si
  42. ;; Want SI=00EB   (jmp $+2)
  43. ;       smov ax,dx
  44. ;       sub al,70h
  45. ;       xor al,0ebh xor -70h
  46. ;       smov si,ax
  47. ;       xor [di],si
  48.  
  49.        smov ax,dx
  50.  
  51.        sub ax,Zeta
  52.        sub ax,Zeta
  53.  
  54.        push ax
  55.  
  56.        sub ax,-(offset udata)-Zeta-Zeta  ; adjust later so ax=udata
  57.        smov cx,ax
  58.        sub ax,7021h
  59.        sub ax,6021h
  60.        sub ax,63h-(7021h+6021h)   ; ax-=0063h
  61.        smov bp,ax
  62.  
  63.        LineFeed
  64.  
  65.        pop ax
  66.  
  67.        sub ax,-(offset DirectPoke)-Zeta-Zeta  ; adjust so ax=DirectPoke
  68.        smov di,ax
  69.        push di
  70.        smov si,dx     ; si=0
  71.        and [di],si
  72.        inc di
  73.        inc di
  74.        and [di],si
  75.        inc di
  76.        inc di
  77.        and [di],si
  78.        inc di
  79.        inc di
  80.        and [di],si
  81.        inc di
  82.        inc di
  83.        and [di],si
  84.  
  85.  
  86.        pop di         ; direct poke area is zero
  87. ; want si=E4D0
  88.        smov ax,dx     ; ax=0
  89.        sub ax,Zeta2  ; ax=D1D1
  90.        xor ax,(-Zeta2) xor 0e4d0h  ; ax=e4d0
  91.        smov si,ax
  92.        xor [di],si
  93.        inc di
  94.        inc di
  95.        xor [di],si
  96.        inc di
  97.        inc di
  98.        xor [di],si
  99.        inc di
  100.        inc di
  101.        xor [di],si
  102.        inc di
  103.        inc di
  104. ; now want si=e008     ; ax=e4d0
  105.        sub ax,217eh
  106.        xor ax,0e008h xor (0e4d0h-217eh)   ; ax=e008
  107.        smov si,ax
  108.        xor [di],si
  109.        smov di,cx
  110.        jz FlushPref
  111.        jnz FlushPref
  112.        db 13,10,'COMT_is_copyright_Alex_Pruss.',13,10
  113. FlushPref:
  114. Top:
  115.        smov ax,dx
  116.        xor ax,[bp+063h]
  117.        inc bp
  118.        inc bp
  119. ;       push ax
  120. ;       sub al,'Z'
  121. ;       pop ax
  122.        cmp al,'Z'
  123.        jz DoneJ
  124. ;       push ax
  125. ;       sub ax,0a0dh
  126. ;       pop ax
  127.        cmp ax,0a0dh
  128.        jz HandleNewLine
  129.  
  130.        sub ax,'AA'   ; OK, now want AL+=AH>>4
  131.  
  132. DirectPoke: db 0dh,0ah,'Good-d' ; shr ah,1  four times--D0E4
  133.             db 'ay'       ; add al,ah--08E0
  134.                           ; al=right value
  135.  
  136.  
  137.        smov si,dx
  138.        and [di],si        ; set to 0
  139.        smov si,ax
  140.        xor [di],si        ; set to al
  141.        inc di
  142. Pos:
  143.        db 75h    ; jnz (NZ IS set)
  144.  
  145. Jmp2:
  146.        db not (Top-Pos-2)   ; just negate this
  147.        db 'Hi,Howdy??'
  148. HandleNewLine:
  149.        inc dx
  150.        dec dx
  151. J0:
  152.        db 74h   ; jz (of course Z as DX=0 permanently)
  153.  
  154. Enc macro Val
  155.     db 'A'+((Val) and 0fh)
  156.     db 'A'+(((Val) shr 4) and 0fh)
  157. endm
  158. udata:
  159.        Enc (Top-(J0+2))
  160. DoneJ=$-1
  161. ;
  162. ;       Enc 0C3h       ; ret
  163. ;       db 'Z'
  164. ;
  165. ;       db 'ILAAME'        ; B8 00 4C  (mov ax,4c)
  166. ;       db 'NM','BC'       ; int 21h
  167. ;       db 'Z'
  168. ;
  169. ;0123456789ABCDEF
  170. ;ABCDEFGHIJKLMNOP
  171.  
  172. end Start
  173.